package app.contatos.view;

import java.util.Locale;

import android.app.Activity;
import android.content.ContentValues;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.database.Cursor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.util.Patterns;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import app.contatos.MainActivity;
import app.contatos.R;
import app.contatos.model.Contato;
import app.contatos.model.ContatoHelper;

public class SalvarActivity extends Activity {

	private ContatoHelper helper;
	private EditText etNome, etTefone, etEmail;
	private Button btSalvar;
	private String contatoId = null;
	private Spinner spGrupo = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.salvar);
		helper = new ContatoHelper(this);
		
		forceLocale("pt", "BR");
		carregar();
		ir();
	}
	
	public void carregar() {
		etNome = (EditText) findViewById(R.id.etNome);
		etTefone = (EditText) findViewById(R.id.etTelefone);
		etEmail = (EditText) findViewById(R.id.etEmail);
		
		btSalvar = (Button) findViewById(R.id.btSalvar);
		
		spGrupo = (Spinner) findViewById(R.id.spGrupo);
		ArrayAdapter<CharSequence> adapter = 
				ArrayAdapter.createFromResource(this,
						R.array.array_grupos, android.R.layout.simple_spinner_item);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spGrupo.setAdapter(adapter);
		
		contatoId = getIntent().getStringExtra(MainActivity._ID);
		if (contatoId != null) {
			carregarContato();
		} else {
			SharedPreferences preferencias = PreferenceManager.getDefaultSharedPreferences(this);
			spGrupo.setSelection(Integer.parseInt(preferencias.getString("lista_grupos", "0")));
		}
	}
	
	public void forceLocale(String language, String country) {
		Locale locale = new Locale(language, country);
		Locale.setDefault(locale);
		Configuration configuration = new Configuration();
		configuration.locale = locale;
		getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
	}
	
	public void carregarContato() {
		Cursor c = helper.ler(contatoId);
		c.moveToFirst();
		etNome.setText(helper.getNome(c));
		etTefone.setText(helper.getTelefone(c));
		etEmail.setText(helper.getEmail(c));
		spGrupo.setSelection(helper.getGrupo(c));
		c.close();
	}

	public void ir() {
		btSalvar.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View view) {
				Contato contato = new Contato();
				contato.setNome(etNome.getText().toString());
				contato.setTelefone(etTefone.getText().toString());
				contato.setEmail(etEmail.getText().toString());
				contato.setGrupo(spGrupo.getSelectedItemPosition());
				ContentValues values = new ContentValues();
				values.put("nome", etNome.getText().toString());
				values.put("telefone", etTefone.getText().toString());
				values.put("email", etEmail.getText().toString());
				values.put("grupo", spGrupo.getSelectedItemPosition());
				
				if (validar(values)) {
					if (contatoId == null) {
						helper.criar(values);
					} else {
						helper.atualizar(contatoId, contato);
					}
					finish();
				}
			}
		});
	}
	
	public boolean validar(Contato contato) {
		if (!Patterns.PHONE.matcher(contato.getTelefone()).matches()) {
			exibirMensagem("Telefone não é válido.");
			return false;
		}
		
		if (!Patterns.EMAIL_ADDRESS.matcher(contato.getEmail()).matches()) {
			exibirMensagem("E-mail não é válido.");
			return false;
		}
		return true;
	}
	
	public boolean validar(ContentValues values) {
		if (!Patterns.PHONE.matcher(values.getAsString("telefone")).matches()) {
			exibirMensagem("Telefone não é válido.");
			return false;
		}
		
		if (!Patterns.EMAIL_ADDRESS.matcher(values.getAsString("email")).matches()) {
			exibirMensagem("E-mail não é válido.");
			return false;
		}
		return true;
	}
	
	public void exibirMensagem(String mensagem) {
    	Toast.makeText(this, mensagem, Toast.LENGTH_LONG).show();
    }
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		helper.close();
	}
}
